package com.zy.design.pattern.factory.method;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zhaoyi
 * @date 2021/3/30 14:21
 */
public class RuleConfigFactoryMap {

    private static final Map<String, IMethodRuleConfigFactory> map = new HashMap<>();


    static {
        /**
         * 如果对象 SqlRuleConfigParser 不可复用工厂类每次都要返回不同的对象
         * 避免烦人的 if-else 分支逻辑
         */
        map.put("sql", new SqlRuleConfigFactory());

        /**
         * 模拟 当对象的创建逻辑比较复杂，不只是简单的 new 一下就可以
         */
        map.put("es", new EsRuleConfigFactory());

    }

    public static IMethodRuleConfigFactory getFactory(String field) {
        IMethodRuleConfigFactory factory = map.get(field.toLowerCase());
        if (factory == null) {
            String msg = String.format("无对应解析器 %s", field);
            throw new IllegalArgumentException(msg);
        }
        return factory;
    }

}
